【玩转ESP32】13、软件定时器esp

您所在的位置:网站首页 esp32 任务 【玩转ESP32】13、软件定时器esp

【玩转ESP32】13、软件定时器esp

2024-06-10 09:21| 来源: 网络整理| 查看: 265

系列文章:

【玩转ESP32】1、开发环境搭建 【玩转ESP32】2、开发参考资料 【玩转ESP32】3、点亮LED,Blink,blink,blink 【玩转ESP32】4、ESP32驱动DHT11 【玩转ESP32】5、i2c-tools访问i2c设备 【玩转ESP32】6、驱动i2c设备—0.96 OLED 【玩转ESP32】7、ESP32连接wifi 【玩转ESP32】8、ESP32 Guru MeditationError报错分析 【玩转ESP32】9、ESP32 作为TCP客户端连接服务器(非阻塞接收) 【玩转ESP32】10、创建用户分区表,数据读写存储 【玩转ESP32】11、编译报错:esp_bt.h:No such file or directory 【玩转ESP32】12、esp32串口使用

1、前言

esp32的组件(components)里面的esp_timer提供了软件定时器相关api,支持周期回调、单词回调等操作。其中软件定时器的初始化在void start_cpu0_default(void)函数中调用esp_timer_init()。

2、API 2.1、定时器配置结构体 typedef struct { esp_timer_cb_t callback; //回调函数 void* arg; //参数 esp_timer_dispatch_t dispatch_method; //设置在哪里调用回调函数,目前只支持在任务中 const char* name; //定时器名称,用于调试 } esp_timer_create_args_t; 2.2、定时器句柄 esp_timer_handle_t 2.3、创建一个定时器 esp_err_t esp_timer_create(const esp_timer_create_args_t* create_args, esp_timer_handle_t* out_handle);

create_args :参数,也就是2.1中的变量类型; out_handle:定时器句柄; esp_err_t:返回值,ESP_OK表示创建成功,其他表示失败。

2.4、启动一个周期定时器 esp_err_t esp_timer_start_periodic(esp_timer_handle_t timer, uint64_t period);

timer :定时器句柄; period:定时时常,单位是微秒; esp_err_t:返回值,ESP_OK表示创建成功,其他表示失败。

2.5、启动一个单次定时器 esp_err_t esp_timer_start_once(esp_timer_handle_t timer, uint64_t timeout_us);

timer :定时器句柄; period:定时时常,单位是微秒; esp_err_t:返回值,ESP_OK表示创建成功,其他表示失败。

2.6、停止一个定时器 esp_err_t esp_timer_stop(esp_timer_handle_t timer);

既可以用于单词定时器、也可以用于周期定时器。 timer :定时器句柄; esp_err_t:返回值,ESP_OK表示操作成功,其他表示失败。

2.7、删除定时器 esp_err_t esp_timer_delete(esp_timer_handle_t timer);

timer :定时器句柄; esp_err_t:返回值,ESP_OK表示操作成功,其他表示失败。

3、代码操作 3.1、定义定时器句柄 esp_timer_handle_t oneshot_timer ,periodic_timer; 3.2、创建并启动定时器 void app_main(void) { const esp_timer_create_args_t periodic_timer_args = { .callback = &periodic_timer_callback, /* name is optional, but may help identify the timer when debugging */ .name = "periodic" };//周期定时器配置 ESP_ERROR_CHECK(esp_timer_create(&periodic_timer_args, &periodic_timer)); const esp_timer_create_args_t oneshot_timer_args = { .callback = &oneshot_timer_callback, .name = "one-shot" };//单次定时器配置 ESP_ERROR_CHECK(esp_timer_create(&oneshot_timer_args, &oneshot_timer)); /* Start the timers */ ESP_ERROR_CHECK(esp_timer_start_periodic(periodic_timer, 1000000));//1s回调一次 ESP_ERROR_CHECK(esp_timer_start_once(oneshot_timer, 5000000));//5s后回调 ESP_LOGI(TAG, "Started timers, time since boot: %lld us", esp_timer_get_time()); } 3.3、定时器回调 static void periodic_timer_callback(void* arg) { int64_t time_since_boot = esp_timer_get_time(); ESP_LOGI(TAG, "Periodic timer called, time since boot: %lld us", time_since_boot); } static void oneshot_timer_callback(void* arg) { int64_t time_since_boot = esp_timer_get_time(); ESP_LOGI(TAG, "One-shot timer called, time since boot: %lld us", time_since_boot); } 4、现象

在这里插入图片描述 可以看出单次定时器,从启动开始,5s后只回调了一次,周期定时器1s回调一次。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3